#ifndef POINTOFVIEW_H
#define POINTOFVIEW_H

#include "vectorf.h"
#include <math.h>
#include <GL/gl.h>

/*
 * =====================================================================================
 *        Class:  PointOfView
 *  Description:  Classe permettant de représenter une caméra dans la scène 3D
 * =====================================================================================
 */

enum cameraMode
{
    freePow,
    lockPow
};

class PointOfView
{
    public :

    /*******************************************************/
    /*              Propriétés                             */
    /*******************************************************/

    cameraMode mode;

    Vectorf vecteurDirecteur;   //  Vecteur utilisé pour déterminer la direction pointé par la caméra
    Vectorf * positionPOW;       //  Coordonnées de la caméra

    int lockX;  //  Variables utilisé pour supprimer un degré de liberté à la caméra
    int lockY;
    int lockZ;

    float rayon;

                    //  Angles correspondant à l'orientation de la caméra

    float phi;      //  Angle autours de l'axe des y
    float teta;     //  Angle autours de l'axe des x


    /*******************************************************/
    /*              Constructeur                           */
    /*******************************************************/

    PointOfView();
    PointOfView(float aphi, float ateta, Vectorf position);

    /*******************************************************/
    /*              Méthodes                               */
    /*******************************************************/

    void SetFree(float ateta, float aphi, Vectorf apos);
    void SetLock(float arayon, Vectorf apos, float aphi, float ateta);
    void SetLock(float arayon, Vectorf apos);

    void SetPOW();
    void SetVecteurDirecteur();

    void GoForward(float coef);
    void GoLeft(float coef);
    void GoRight(float coef);
    void GoDownward(float coef);
};

#endif
